package com.xinchao.dao;

import com.xinchao.model.Area;
import com.xinchao.model.dto.AreaCityDTO;
import com.xinchao.model.dto.AreaDistrictDTO;
import com.xinchao.model.dto.AreaProvinceDTO;
import com.xinchao.model.dto.AreaTreeDTO;
import com.xinchao.model.vo.AreaVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface AreaMapper {
	/**
	 * 保存省市区
	 *
	 * @param area Area
	 */
	void insertArea(Area area);

	/**
	 * 修改省市区
	 *
	 * @param area Area
	 */
	void updateArea(Area area);

	/**
	 * 获取所有的省
	 *
	 * @return List<AreaProvinceDTO>
	 */
	List<AreaProvinceDTO> listAllProvince();

	/**
	 * 通过省编码获取省下面的所有的市
	 *
	 * @param provinceCode 省编码
	 * @return List<AreaCityDTO>
	 */
	List<AreaCityDTO> listCityByProvince(String provinceCode);

	/**
	 * 获取部门的城市列表
	 *
	 * @param departmentId 部门ID
	 * @return List<AreaCityDTO>
	 */
	List<AreaCityDTO> listCityByDeparmentId(Long departmentId);

	/**
	 * 获取所有被选择的城市
	 * @return List<AreaCityDTO>
	 */
	List<AreaCityDTO> listAllSelectedCity();

	/**
	 * 根据城市编码查找城市被关联的数量
	 *
	 * @param cityCodeArray 市编码字符串数组（以逗号分隔）
	 * @return Long
	 */
	Long countSelectedCity(String[] cityCodeArray);

	/**
	 * 获取城市的所有行政区
	 *
	 * @param cityCode 城市编码
	 * @return List<AreaDistrictDTO>
	 */
	List<AreaDistrictDTO> listDistrictByCityCode(@Param("cityCode") String cityCode);

    /**
     * 通过省查询市
     *
     * @param province 省份名称
     * @return List<AreaVO>
     */
    List<AreaVO> listCityByProvinceName(String province);

    /**
     * 通过市查询区/县
     *
     * @param city 市
     * @return List<AreaVO>
     */
    List<AreaVO> listDistrictByCityName(String city);

    /**
     * 查询所有省
     *
     * @return List<AreaVO>
     */
    List<AreaVO> listProvince();

    List<AreaTreeDTO> listDataTree();

	AreaTreeDTO getParentByCityCode(String cityCode);

    void updateAreaTree(AreaTreeDTO data);

    List<AreaTreeDTO> listAllTreeDataByDepartmentId(@Param("departmentId") Long departmentId);
}